02.04 - Repaso de conceptos
Conceptos básicos de C
Estructuras y punteros
Estructuras: Las estructuras en C son una forma de agrupar variables relacionadas bajo un solo nombre. Pueden contener variables de diferentes tipos de datos y facilitan la organización y manejo de datos en programas más grandes.
Punteros: Los punteros son variables que almacenan la dirección de memoria de otras variables. Permiten manipular la memoria de forma más eficiente y son fundamentales para el manejo de memoria dinámica y el paso de argumentos por referencia a funciones.
Ejercicio de Estructuras y punteros
Crear un programa que represente a una persona utilizando una estructura. La estructura debe contener el nombre, la edad y el género de la persona. Luego, utiliza punteros para modificar y mostrar la información de la persona.
Se debe definir una estructura Persona que agrupa el nombre, la edad y el género de una persona. Luego, se utiliza un puntero para modificar y mostrar la información de la persona.
#include <stdio.h>
#include <string.h>
typedef struct {
char nombre[50];
int edad;
char genero;
} Persona;
int main() {
Persona p1;
Persona *ptr_p1 = &p1;
strcpy(ptr_p1->nombre, "Juan Perez");
ptr_p1->edad = 30;
ptr_p1->genero = 'M';
printf("Nombre: %s\n", ptr_p1->nombre);
printf("Edad: %d\n", ptr_p1->edad);
printf("Genero: %c\n", ptr_p1->genero);
return 0;
}
Funciones recursivas
La recursividad es un concepto en el que una función se llama a sí misma como parte de su ejecución. Para que una función recursiva no entre en un bucle infinito, debe tener una condición base que detenga la recursión.
Ejercicio de Funciones recursivas
Escribir una función recursiva que calcule el factorial de un número entero. La función se debe llamar a sí misma con un valor decreciente hasta llegar a la condición base (n == 0), momento en el que se detiene la recursión y se devuelve el resultado.
#include <stdio.h>
int factorial(int n);
int main() {
int numero;
printf("Ingrese un numero entero: ");
scanf("%d", &numero);
printf("El factorial de %d es: %d\n", numero, factorial(numero));
return 0;
}
int factorial(int n) {
if (n == 0) {
return 1;
} else {
return n * factorial(n - 1);
}
}
Manejo de archivos
El manejo de archivos en C permite leer y escribir datos en archivos externos, lo que es útil para almacenar y recuperar información de manera persistente. Las funciones principales para el manejo de archivos incluyen fopen, fclose, fread, fwrite, fscanf y fprintf.
Ejercicio de Manejo de archivos
Crear un programa que escriba en un archivo de texto los números del 1 al 10 y luego los lea y muestre por pantalla.
#include <stdio.h>
int main() {
FILE *archivo;
// Escribir en el archivo
archivo = fopen("numeros.txt", "w");
for (int i = 1; i <= 10; i++) {
fprintf(archivo, "%d\n", i);
}
fclose(archivo);
// Leer del archivo
archivo = fopen("numeros.txt", "r");
int numero;
printf("Numeros del archivo:\n");
while (fscanf(archivo, "%d", &numero) != EOF) {
printf("%d\n", numero);
}
fclose(archivo);
return 0;
}
Memoria dinámica
La memoria dinámica es una técnica que permite asignar y liberar memoria en tiempo de ejecución según las necesidades del programa. Las funciones malloc, calloc, realloc y free se utilizan para manejar la memoria dinámica en C.
Ejercicio de memoria dinámica
Escribir un programa que pida al usuario la cantidad de números que desea ingresar, y luego utilice memoria dinámica para almacenar y mostrar estos números.
#include <stdio.h>
#include <stdlib.h>
int main() {
int cantidad;
printf("Ingrese la cantidad de numeros: ");
scanf("%d", &cantidad);
int *numeros = (int *) malloc(cantidad * sizeof(int));
for (int i = 0; i < cantidad; i++) {
printf("Ingrese el numero %d: ", i + 1);
scanf("%d", &numeros[i]);
}
printf("Numeros ingresados:\n");
for (int i = 0; i < cantidad; i++) {
printf("%d\n", numeros[i]);
}
free(numeros);
return 0;
}